﻿#include "sensororder.h"

/**
 * @brief SensorOrder::TL740D_setOutputMode 设置传感器输出模式
 *          自动输出制:传感器上电后自动输出角度,输出频率 25HZ（默认设置）.
 *          (此功能可断电记忆)
 *          传感器应答回复命令 例: 68 05 00 8C 00 91  数据域中的数表示传感器回应的结果 00 成功 FF 失败
 * @param mode 输出模式,见enum TL740D_OutputMode
 * @return 命令
 */
QByteArray SensorOrder::TL740D_setOutputMode( SensorOrder::Tl740dOutputMode mode ) {
    QByteArray order( 6, 0x00 );

    order[ 0 ] = 0x68;                                                //标 示 符
    order[ 1 ] = 0x05;                                                //数 据 长 度
    order[ 2 ] = 0x00;                                                //地 址 码
    order[ 3 ] = 0x0C;                                                //命 令 字
    order[ 4 ] = mode;                                                //数 据 域
    order[ 5 ] = static_cast< char >( Utility::CKS( order, 1, 4 ) );  //校 验 和
    return order;
}

/**
 * @brief SensorOrder::TL740D_setBaudRate 设置通讯速率 此命令设置须断电后重启生效,同时断电保存功能
 *          传感器应答回复命令 例: 68 05 00 8B 00 90 数据域中的数表示传感器回应的结果 00 成功 FF 失败
 * @param baudRate 波特率：默认值为:9600
 * @return 命令
 */
QByteArray SensorOrder::TL740D_setBaudRate( SensorOrder::Tl740dBaudRate baudRate ) {
    QByteArray order( 6, 0x00 );

    order[ 0 ] = 0x68;                                                //标 示 符
    order[ 1 ] = 0x05;                                                //数 据 长 度
    order[ 2 ] = 0x00;                                                //地 址 码
    order[ 3 ] = 0x0B;                                                //命 令 字
    order[ 4 ] = baudRate;                                            //数 据 域
    order[ 5 ] = static_cast< char >( Utility::CKS( order, 1, 4 ) );  //校 验 和
    return order;
}

/**
 * @brief SensorOrder::TL740D_clearAngle 对方位角清零命令 当方位角长期工作以后有误差，可以发送此命令，发送成功后，
 *          方位角输出回来 “0” 度 例: 68 04 00 28 2c
 *          传感器应答回复命令 例: 68 05 00 28 00 2D 数据域中的数表示传感器回应的结果 00 成功 FF 失败
 * @return 命令
 */
QByteArray SensorOrder::TL740D_clearAngle() {
    QByteArray order( 5, 0x00 );

    order[ 0 ] = 0x68;  //标 示 符
    order[ 1 ] = 0x04;  //数 据 长 度
    order[ 2 ] = 0x00;  //地 址 码
    order[ 3 ] = 0x28;  //命 令 字
    order[ 4 ] = 0x2C;  //校 验 和
    return order;
}

QByteArray SensorOrder::QrcodeReadOrder() {
    QByteArray order( 2, 0x00 );

    order[ 0 ] = static_cast< char >( 0xC8 );
    order[ 1 ] = 0x37;
    return order;
}

QByteArray SensorOrder::RFIDReadOrder() {
    QByteArray request( 9, 0x00 );

    request[ 0 ] = static_cast< char >( 0xAA );
    request[ 1 ] = static_cast< char >( 0x09 );
    request[ 2 ] = static_cast< char >( 0x09 );
    request[ 3 ] = static_cast< char >( 0x68 );
    request[ 4 ] = static_cast< char >( 0x00 );
    request[ 5 ] = static_cast< char >( 0x00 );
    request[ 6 ] = static_cast< char >( 0x00 );
    request[ 7 ] = static_cast< char >( 0x92 );
    request[ 8 ] = static_cast< char >( 0x88 );
    return request;
}

QByteArray SensorOrder::RFIDStopOrder() {
    QByteArray request( 1, 0x00 );

    request[ 0 ] = static_cast< char >( 0x11 );
    return request;
}

QByteArray SensorOrder::RFIDStartOrder() {
    QByteArray request( 7, 0x00 );

    request[ 0 ] = static_cast< char >( 0xAA );
    request[ 1 ] = static_cast< char >( 0x07 );
    request[ 2 ] = static_cast< char >( 0x07 );
    request[ 3 ] = static_cast< char >( 0xff );
    request[ 4 ] = static_cast< char >( 0x00 );
    request[ 5 ] = static_cast< char >( 0xff );
    request[ 6 ] = static_cast< char >( 0x4d );
    return request;
}

QByteArray SensorOrder::IoControlReadOrder() {
    /*******************获取io的输入状态*******************/
    QByteArray read_io_in( 8, 0x00 );

    read_io_in[ 0 ] = 0x01;
    read_io_in[ 1 ] = 0x02;
    read_io_in[ 2 ] = 0x00;
    read_io_in[ 3 ] = 0x00;
    read_io_in[ 4 ] = 0x00;
    read_io_in[ 5 ] = 0x20;
    read_io_in[ 6 ] = 0x79;                         // CRC校验低位
    read_io_in[ 7 ] = static_cast< char >( 0xd2 );  // CRC校验高位
    return read_io_in;
}

SensorOrder::SensorOrder( QObject* parent ) : QObject( parent ) {}
